home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / tex / cmsrc392.zip / ROMANL.MF < prev    next >
Text File  |  1992-03-30  |  40KB  |  821 lines

  1. % Computer Modern Roman lower case:
  2. % These letters were originally coded by D. E. Knuth in November, 1979,
  3. % inspired by the Monotype faces used in {\sl The Art of Computer Programming}.
  4. % Sans serif designs by Richard Southall were added in April, 1982.
  5. % The programs were revised for the new \MF\ conventions in 1985.
  6.  
  7. % Character codes \0141 through \0172 are generated.
  8.  
  9. cmchar "The letter a";
  10. beginchar("a",9u#,x_height#,0);
  11. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  12. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  13. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  14. pickup fine.nib; top y3r=h+vround 1.5oo;
  15. if serifs: pos1(flare,180); pos2(hair,180);
  16.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  17.  y1=min(bh+.5flare+2vair+2,.9[bh,h]-.5flare);
  18.  bulb(3,2,1);  % bulb
  19. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  20.  pos3(1/8[vair,thin_join],90);
  21.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  22.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  23. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,h];
  24. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  25. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  26. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  27. pos7(hround(curve-2stem_corr),180);
  28. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  29. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  30. pos9(thin_join,360); z9l=z5l;
  31. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  32. {{interim superness:=more_super;
  33.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  34. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  35.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  36.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  37.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  38.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  39.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  40.   filldraw z5'l---z10l...z11l{right}--z11r
  41.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  42.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  43.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  44.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  45.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  46.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  47.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  48.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  49. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  50.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  51.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  52.  filldraw stroke z5'e--z10e; fi  % base of stem
  53. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); endchar;
  54.  
  55. cmchar "The letter b";
  56. beginchar("b",10u#+serif_fit#,asc_height#,0);
  57. italcorr .5x_height#*slant+min(.5curve#-u#,-.25u#);
  58. adjust_fit(serif_fit#,0);
  59. pickup tiny.nib; pos1(stem',0); pos2(stem,0);
  60. pos0'(stem',0); pos0(stem,0); z0l=z0'l; x0'=x1; x0=x2;
  61. lft x1l=hround(2.5u-.5stem'); top y1=h;
  62. numeric edge; edge=rt x2r;
  63. pickup fine.nib; pos3(if hefty:thin_join else: hair fi,180);
  64. pos4(vair,90); pos5(curve,0); pos6(vair,-90); penpos7(x3l-x3r,-180);
  65. rt x3l=max(rt x3l-(lft x3r-tiny.lft x2l),1/3[rt x2,edge]);
  66. y3=1/8[bar_height,x_height];
  67. x4l=w-.5(w-serif_fit)+.5u; top y4r=x_height+oo;
  68. rt x5r=hround min(w-1.35u+.5curve,w-.6u); y5=.5x_height;
  69. x6l=x4l-.2u; bot y6r=-oo;
  70. x7=x3; y7=min(y3,y6+y4-y3+.6vair);
  71. (x,y4r)=whatever[z3l,z4l]; x4r:=min(x,.5[x4,x5r]);
  72. (x',y6r)=whatever[z7l,z6l]; x6r:=min(x',.5[x6,x5r]);
  73. filldraw stroke z3e{up}...pulled_arc.e(4,5)&pulled_arc.e(5,6)...{up}z7e; % bowl
  74. y0=ypart(((edge,h)--(edge,0))intersectionpoint(z3l{up}...{right}z4l));
  75. y2=ypart(((edge,h)--(edge,0))intersectionpoint(z6l{left}...{up}z7l));
  76. pickup tiny.nib; filldraw stroke z1e--z0'e--z0e--z2e;  % stem
  77. pickup crisp.nib; pos8(hair,0); pos7'(stem,0);
  78. z7'=z2; x8l=x7'l; bot y8=0;
  79. filldraw stroke z7'e--z8e;  % point
  80. if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); fi  % upper serif
  81. penlabels(0,1,2,3,4,5,6,7,8); endchar;
  82.  
  83. cmchar "The letter c";
  84. beginchar("c",8u#,x_height#,0);
  85. italcorr x_height#*slant-.2u#;
  86. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  87. pickup fine.nib; pos2(vair',90); pos4(vair',270);
  88. x2=x4=.5(w+u); top y2r=vround(h+1.5oo); bot y4r=-oo;
  89. pos3(curve,180); lft x3r=hround max(.6u,1.35u-.5curve); y3=.5h;
  90. if serifs: pos1(hair,0); pos0(flare,0);
  91.  y1=min(bar_height+.5flare+2vair'+2,.9[bar_height,h]-.5flare);
  92.  rt x1r=hround(w-.7u); bulb(2,1,0);  % bulb
  93.  pos5(hair,0); rt x5r=hround(w-.5u);
  94.  y5=max(good.y(.5bar_height-.9),y4l+vair');
  95.  (x,y4l)=whatever[z4r,z5l]; x4l:=min(x,x4l+.5u);
  96.  filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
  97.   & pulled_super_arc.e(3,4)(.5superpull)
  98.   ..tension .9 and 1..{x5-x4,5(y5-y4)}z5e;  % arc and lower terminal
  99. else: pos1(4/7[vair',flare],80);
  100.  rt x1r=hround(w-.6u); top y1r=vround .82[bar_height,top y2r];
  101.  filldraw stroke term.e(2,1,right,.8,4);  % upper terminal
  102.  pos5(.6[vair',flare],275); rt x5r=hround(w-.5u);
  103.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  104.  forsuffixes e=l,r: path p.e; p.e=z4e{right}..tension .9 and 1..z5e;
  105.   if angle direction 1 of p.e>75:
  106.    p.e:=z4e{right}..tension atleast.9 and 1..{dir 75}z5e; fi endfor
  107.  filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
  108.   & pulled_super_arc.e(3,4)(.5superpull) & p.e; fi  % arc and lower terminal
  109. penlabels(0,1,2,3,4,5); endchar;
  110.  
  111. cmchar "The letter d";
  112. beginchar("d",10u#+serif_fit#,asc_height#,0);
  113. italcorr asc_height#*slant-serif_fit#+.5stem#-2u#;
  114. adjust_fit(0,serif_fit#);
  115. pickup tiny.nib; pos1(stem',0); pos2(stem,0);
  116. pos0'(stem',0); pos0(stem,0); z0r=z0'r; x0'=x1; x0=x2;
  117. rt x1r=hround(w-2.5u+.5stem'); top y1=h;
  118. numeric edge; edge=lft x2l;
  119. pickup fine.nib; pos3(if hefty:thin_join else: hair fi,0);
  120. pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360);
  121. lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),1/3[lft x2,edge]);
  122. y3=1/8[bar_height,x_height];
  123. x4l=.5(w-serif_fit)-.3u; top y4r=x_height+oo;
  124. lft x5r=hround max(1.35u-.5curve,.6u); y5=.5x_height;
  125. x6l=x4l-.2u; bot y6r=-oo;
  126. x7=x3; y7=min(y3,y6+y4-y3+.6vair);
  127. (x,y4r)=whatever[z3l,z4l]; x4r:=max(x,.5[x5r,x4]);
  128. (x',y6r)=whatever[z7l,z6l]; x6r:=max(x',.5[x5r,x6]);
  129. filldraw stroke z3e{up}...pulled_arc.e(4,5)
  130.  & pulled_arc.e(5,6)...{up}z7e; % bowl
  131. y0=ypart(((edge,h)--(edge,0))intersectionpoint(z3l{up}...{left}z4l));
  132. pickup tiny.nib; bot y2=if serifs:-min(oo,serif_drop) else: 0 fi;
  133. filldraw stroke z1e--z0'e--z0e--z2e;  % stem
  134. if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop);  % upper serif
  135.  sloped_serif.r(2,0,b,1/3,jut,min(oo,serif_drop)); fi  % lower serif
  136. penlabels(0,1,2,3,4,5,6,7); endchar;
  137.  
  138. cmchar "The letter e";
  139. beginchar("e",7.25u#+max(.75u#,.5curve#),x_height#,0);
  140. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  141. adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
  142. numeric left_curve,right_curve;
  143. left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
  144. if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
  145. if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
  146. pickup tiny.nib; pos1(right_curve,0);
  147. pos2(vair,90); pos3(left_curve,180);
  148. y1=good.y bar_height; top y2r=h+vround 1.5oo; y0l=bot y1;
  149. rt x1r=hround min(w-.5u,w-u+.5right_curve);
  150. lft x3r=hround max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
  151. {{interim superness:=more_super;
  152.  filldraw stroke super_arc.e(1,2)}};  % right bowl
  153. y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
  154. if serifs: pos4(vair',270); pos5(hair,360);
  155.  y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
  156.  (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u);
  157.  filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
  158.   ...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
  159. else: pos4(vair,270);
  160.  filldraw stroke super_arc.e(2,3) & super_arc.e(3,4);  % left bowl and arc
  161.  pickup fine.nib; pos4'(vair,270); z4=z4';
  162.  pos5(.5[vair,flare],275); rt x5r=hround(w-.6u);
  163.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  164.  filldraw stroke term.e(4',5,right,1,4); fi  % terminal
  165. path testpath; testpath=super_arc.r(2,3) & super_arc.r(3,4);
  166. y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
  167. forsuffixes $=l,r:
  168.  x0$=xpart(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
  169. fill stroke z0e--z1'e;  %